home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Frameworks / Dragonsmith 1.1.1 / Base files / Utilities / AppleEventUtils.c next >
Encoding:
C/C++ Source or Header  |  1994-01-15  |  5.7 KB  |  209 lines  |  [TEXT/KAHL]

  1. /*
  2.     AppleEventUtils.c
  3.     
  4.     Functions to simplify Apple event processing
  5.     
  6.     Copyright © 1992–1993 by Paul M. Hoffman
  7.     Send feedback to paul.hoffman@umich.edu -or- dragonsmith@umich.edu
  8.     
  9.     This source code may be freely used, altered, and distributed in any way as long as:
  10.         1.    It is GIVEN away rather than sold (except as expressly permitted by the author)
  11.         2.    This statement and the above copyright notice are left intact.
  12.     
  13.     Created    11 Jul 1992    Extracted GetFSSpecsFromAEDescList from Dragon.c
  14.     Modified    12 Sep 1992    Removed GetFSSpecsFromAEDescList — it's no longer needed in Dragonsmith
  15.             16 May 1993    Added AEGetNthBoolean, AEGetKeyBoolean, etc.
  16.             01 Aug 1993    Minor modifications
  17.             14 Aug 1993    Added SendToSelf
  18.             
  19. */
  20.  
  21. #include    "AppleEventUtils.h"
  22. #include    "HandleUtils.h"
  23.  
  24. OSErr SendToSelf (AEEventClass eventClass , AEEventID eventID, AEDesc *directObject,
  25.                                                             AEDesc *reply, AESendMode sendMode)
  26. {
  27.     ProcessSerialNumber    selfPSN = { 0, kCurrentProcess };
  28.     AEAddressDesc        selfAddress;
  29.     AEDesc                ignoreReply;
  30.     AppleEvent            theEvent;
  31.     OSErr                err;
  32.     
  33.     err = AECreateDesc (typeProcessSerialNumber, (Ptr) &selfPSN, sizeof (ProcessSerialNumber), &selfAddress);
  34.     err = AECreateAppleEvent (eventClass, eventID, &selfAddress, kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
  35.     if (reply == NULL)
  36.         reply = &ignoreReply;
  37.     if (directObject != NULL)
  38.         err  = AEPutParamDesc (&theEvent, keyDirectObject, directObject);
  39.     err = AESend (&theEvent, reply, sendMode, kAENormalPriority, kAEDefaultTimeout, NULL, NULL);
  40. }
  41.  
  42. OSErr GotRequiredParams (AppleEvent *theEvent)
  43. {
  44.     DescType    returnedType;
  45.     long            actualSize;
  46.     OSErr        err;
  47.     
  48.     err = AEGetAttributePtr (theEvent, keyMissedKeywordAttr, typeWildCard, &returnedType, NULL, 0, &actualSize);
  49.     if (err == errAEDescNotFound)
  50.         return noErr;
  51.     else if (err == noErr)
  52.         return errAEEventNotHandled;
  53.     else
  54.         return err;
  55. }
  56.  
  57. OSErr AEGetNthBoolean (AEDescList *listOrRecord, long index, AEKeyword *keyword, Boolean *result)
  58. {
  59.     DescType    typeCode;
  60.     long            actualSize;
  61.     OSErr        err;
  62.     
  63.     err = AEGetNthPtr (listOrRecord, index, typeBoolean, keyword, &typeCode, (Ptr) result, 1, &actualSize);
  64.     if (err == noErr && actualSize == 0)
  65.         return errAECoercionFail;
  66.     else
  67.         return err;
  68. }
  69.  
  70. OSErr AEGetNthShort (AEDescList *listOrRecord, long index, AEKeyword *keyword, short *result)
  71. {
  72.     DescType    typeCode;
  73.     long            actualSize;
  74.     OSErr        err;
  75.     
  76.     err = AEGetNthPtr (listOrRecord, index, typeShortInteger, keyword, &typeCode, (Ptr) result, sizeof (short), &actualSize);
  77.     if (err == noErr && actualSize < sizeof (short))
  78.         return errAECoercionFail;
  79.     else
  80.         return err;
  81. }
  82.  
  83. OSErr AEGetNthLong (AEDescList *listOrRecord, long index, AEKeyword *keyword, long *result)
  84. {
  85.     DescType    typeCode;
  86.     long            actualSize;
  87.     OSErr        err;
  88.     
  89.     err = AEGetNthPtr (listOrRecord, index, typeLongInteger, keyword, &typeCode, (Ptr) result, sizeof (long), &actualSize);
  90.     if (err == noErr && actualSize < sizeof (long))
  91.         return errAECoercionFail;
  92.     else
  93.         return err;
  94. }
  95.  
  96. OSErr AEGetNthType (AEDescList *listOrRecord, long index, AEKeyword *keyword, DescType *result)
  97. {
  98.     DescType    typeCode, tempType = '    ';
  99.     long            actualSize;
  100.     OSErr        err;
  101.     
  102.     err = AEGetNthPtr (listOrRecord, index, typeType, keyword, &typeCode, (Ptr) &tempType, sizeof (long), &actualSize);
  103.     if (err == noErr) {
  104.         if (actualSize == 0)
  105.             return errAECoercionFail;
  106.         else
  107.             *result = tempType;
  108.     }
  109.     return err;
  110. }
  111.  
  112. OSErr AEGetNthStr255 (AEDescList *listOrRecord, long index, AEKeyword *keyword, StringPtr result)
  113. {
  114.     DescType    typeCode;
  115.     long            actualSize;
  116.     OSErr        err;
  117.     
  118.     err = AEGetNthPtr (listOrRecord, index, typeChar, keyword, &typeCode, (Ptr) &result[1], 255, &actualSize);
  119.     if (err == noErr && actualSize > 255)
  120.         return errAECoercionFail;
  121.     if (err == noErr)
  122.         result[0] = actualSize;
  123.     else
  124.         result[0] = 0;
  125.     return err;
  126. }
  127.  
  128. OSErr AEGetNthList (AEDescList *listOrRecord, long index, AEKeyword *keyword, AEDescList *result)
  129. {
  130.     return AEGetNthDesc (listOrRecord, index, typeAEList, keyword, result);
  131. }
  132.  
  133. OSErr AEGetKeyBoolean (AERecord *record, AEKeyword keyword, Boolean *result)
  134. {
  135.     DescType    typeCode;
  136.     long            actualSize;
  137.     OSErr        err;
  138.     
  139.     err = AEGetKeyPtr (record, keyword, typeBoolean, &typeCode, (Ptr) result, 1, &actualSize);
  140.     if (err == noErr && actualSize == 0)
  141.         return errAECoercionFail;
  142.     else
  143.         return err;
  144. }
  145.  
  146. OSErr AEGetKeyShort (AERecord *record, AEKeyword keyword, short *result)
  147. {
  148.     DescType    typeCode;
  149.     long            actualSize;
  150.     OSErr        err;
  151.     
  152.     err = AEGetKeyPtr (record, keyword, typeShortInteger, &typeCode, (Ptr) result, sizeof (short), &actualSize);
  153.     if (err == noErr && actualSize < sizeof (short))
  154.         return errAECoercionFail;
  155.     else
  156.         return err;
  157. }
  158.  
  159. OSErr AEGetKeyLong (AERecord *record, AEKeyword keyword, long *result)
  160. {
  161.     DescType    typeCode;
  162.     long            actualSize;
  163.     OSErr        err;
  164.     
  165.     err = AEGetKeyPtr (record, keyword, typeLongInteger, &typeCode, (Ptr) result, sizeof (long), &actualSize);
  166.     if (err == noErr && actualSize < sizeof (long))
  167.         return errAECoercionFail;
  168.     else
  169.         return err;
  170. }
  171.  
  172. OSErr AEGetKeyType (AERecord *record, AEKeyword keyword, DescType *result)
  173. {
  174.     DescType    typeCode, tempType = '    ';
  175.     long            actualSize;
  176.     OSErr        err;
  177.     
  178.     err = AEGetKeyPtr (record, keyword, typeType, &typeCode, (Ptr) &tempType, sizeof (long), &actualSize);
  179.     if (err == noErr) {
  180.         if (actualSize == 0)
  181.             return errAECoercionFail;
  182.         else
  183.             *result = tempType;
  184.     }
  185.     return err;
  186. }
  187.  
  188. OSErr AEGetKeyStr255 (AERecord *record, AEKeyword keyword, StringPtr result)
  189. {
  190.     DescType    typeCode;
  191.     long            actualSize;
  192.     OSErr        err;
  193.     
  194.     err = AEGetKeyPtr (record, keyword, typeChar, &typeCode, (Ptr) &result[1], 255, &actualSize);
  195.     if (err == noErr && actualSize > 255)
  196.         return errAECoercionFail;
  197.     if (err == noErr)
  198.         result[0] = actualSize;
  199.     else
  200.         result[0] = 0;
  201.     return err;
  202. }
  203.  
  204. OSErr AEGetKeyList (AERecord *record, AEKeyword keyword, AEDescList *result)
  205. {
  206.     return AEGetKeyDesc (record, keyword, typeAEList, result);
  207. }
  208.  
  209.